#!/usr/bin/env node

/**
 * AIDE 数据库创建脚本
 * 用于创建数据库（如果不存在）
 */

const { Pool } = require('pg')

// 获取数据库配置
const getDatabaseConfig = () => {
  if (process.env.DATABASE_URL) {
    const url = new URL(process.env.DATABASE_URL)
    return {
      host: url.hostname,
      port: parseInt(url.port || '5432'),
      user: url.username,
      password: url.password,
      database: url.pathname.slice(1), // 去掉开头的 /
      ssl: process.env.NODE_ENV === 'production' ? { rejectUnauthorized: false } : false
    }
  }
  
  return {
    host: process.env.DB_HOST || 'localhost',
    port: parseInt(process.env.DB_PORT || '5432'),
    database: process.env.DB_NAME || 'aide_db',
    user: process.env.DB_USER || 'postgres',
    password: process.env.DB_PASSWORD || 'password',
  }
}

async function createDatabase() {
  const config = getDatabaseConfig()
  const targetDatabase = config.database
  
  // 连接到默认的 postgres 数据库来创建目标数据库
  const adminConfig = {
    ...config,
    database: 'postgres' // 连接到默认数据库
  }
  
  const pool = new Pool(adminConfig)
  
  try {
    console.log('🔍 检查数据库是否存在...')
    
    const client = await pool.connect()
    
    // 检查数据库是否存在
    const result = await client.query(
      'SELECT 1 FROM pg_database WHERE datname = $1',
      [targetDatabase]
    )
    
    if (result.rows.length > 0) {
      console.log(`✅ 数据库 "${targetDatabase}" 已存在`)
      client.release()
      return true
    }
    
    // 创建数据库
    console.log(`🔧 创建数据库 "${targetDatabase}"...`)
    await client.query(`CREATE DATABASE "${targetDatabase}"`)
    console.log(`✅ 数据库 "${targetDatabase}" 创建成功`)
    
    client.release()
    return true
    
  } catch (error) {
    console.error('❌ 创建数据库失败:', error.message)
    
    if (error.code === 'ECONNREFUSED') {
      console.error('💡 建议检查:')
      console.error('   1. PostgreSQL 服务是否已启动')
      console.error('   2. 数据库连接配置是否正确')
      console.error('   3. 防火墙是否阻止了连接')
    } else if (error.code === '28P01') {
      console.error('💡 认证失败，请检查用户名和密码')
    } else if (error.code === '42P04') {
      console.log(`ℹ️  数据库 "${targetDatabase}" 已存在`)
      return true
    }
    
    return false
  } finally {
    await pool.end()
  }
}

// 如果直接运行此脚本
if (require.main === module) {
  createDatabase().then(success => {
    if (!success) {
      process.exit(1)
    }
  })
}

module.exports = { createDatabase }
